C++的内存分布以及static的使用 您所在的位置:网站首页 static 内存分配 C++的内存分布以及static的使用

C++的内存分布以及static的使用

2024-07-14 23:23| 来源: 网络整理| 查看: 265

详见:https://blog.csdn.net/chenyijun/article/details/81938287

static的使用主要为两部分:不涉及类的static和涉及类的static

一、C/C++的内存分布

1.栈区: 由编译器自动分配释放,像局部变量,函数参数,都是在栈区。会随着作用于退出而释放空间。

2.堆区:程序员分配并释放的区域,像malloc(c),new(c++) 

3.全局数据区(静态区):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束释放。

4.代码区 

同一进程间的线程共享的资源:

文件等公共资源。代码区全局变量。全局变量与某个函数无关,与线程无关,是共享的。静态变量。由于其存放位置位于常量段中的.bss段和.data段,所以是共享的bss段为未初始化的全局变量和静态变量的内存区域,data段为已经初始化的全局变量和静态变量的内存区域。堆。堆是进程开辟的内存空间,因此共享的。

独占的资源:

栈  存放局部变量寄存器  将线程从一个切换到另一个时,必须将当前线程的寄存器状态保存。以便当前线程再被切换回来的时候可以被恢复。 二、不涉及类的static的使用

不涉及类的static的使用在C语言中就已经在使用了,在C++中同样可以使用。

主要又分为三种用途,从作用域和生存期两个方面进行分析:

1.静态局部变量:

在函数内部修饰局部变量,变量的生存期到程序结束。

作用域:函数体内部, 生存期:整个程序运行期间

静态局部变量的特点(括号内是局部变量的对比):

(1)该变量在全局数据区分配内存(局部变量在栈区分配内存);

(2)静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进行初始化(局部变量每次函数调用都会被初始化);

(3)静态局部变量一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为0(局部变量不会被初始化);

(4)它始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域,也就是不能在函数体外面使用它(局部变量在栈区,在函数结束后立即释放内存);

2.静态全局变量:

定义在函数体外,用于修饰全局变量,表示该变量只在本文件可见。

作用域:该文件内部, 生存期:整个程序运行期间

//static_test.cpp int b = 1007; //test_C++.cpp extern int b; int main() { cout m_nWidth * this->m_nHeght); m_nSum += (this->m_nWidth * this->m_nHeght); } void GetSum() { cout


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有